lexer grammar CLexer;

options {
  language = Java;
}


@header {
  package PL.practica10;
}


// palabras reservadas
INT : 'int';
FLOAT : 'float';
CHAR : 'char';
VOID : 'void';
IF :'if';  
ELSE : 'else';
WHILE : 'while';
RETURN : 'return';
BREAK : 'break';
FOR : 'for';
PRINTF : 'printf';

fragment DIGITO: '0'..'9';
fragment LETRA : ('A'..'Z') | ('a'..'z') | '_';
fragment NUEVA_LINEA : '\r\n';
fragment TRUE :'true';
fragment  FALSE : 'false';
fragment COMILLAS : '\"';

 //TOKENS A FILTRAR 
  BLANCO: (' '|'\t'|NUEVA_LINEA) {skip();};
  COMENTARIO: '/*' (options {greedy=false;}:.)* '*/'{skip();};
  COMENTARIOlINEA : '//' (options { greedy=false; } : .)* NUEVA_LINEA{skip();};
  
// Tokens identificadores y tipos de datos
BOOLEAN: (TRUE | FALSE);
ID : LETRA (LETRA | DIGITO)*;
NUMERO: DIGITO+ ('.' DIGITO+)?;
CADENA : COMILLAS (options {greedy=false;}:.)* COMILLAS;
CARACTER : '\'' LETRA '\'';

// Tokens de aritméticos
MAS : '+';
MENOS : '-';
ASTERISCO : '*';
SLASH : '/';

//Tokens operadores relacionales
IGUAL : '==';
DISTINTO : '!=' ;
MENOR_IGUAL : '<=';
MAYOR_IGUAL : '>=';
MENOR : '<';
MAYOR : '>';


// Tokens de cierre y apertura
ABRIR_PAR : '(';
CERRAR_PAR : ')';
ABRIR_CORCHETE : '[';
CERRAR_CORCHETE : ']';
ABRIR_LLAVE: '{';
CERRAR_LLAVE: '}';

// otros
DOSPUNTOS : ':';
SEPARADOR : ';';
COMA : ',';
INTERROGACION : '?';
ASIGNACION : '=';
